package Top4.mandatory;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;
import com.rabbitmq.client.MessageProperties;
import util.ConnectionUtil;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.TimeoutException;

/**
 * @Auther: Administrator
 * @Date: 2019/2/28 20:43   这个是备胎交换机
 * @Description: 如果此时发送一条消息到 nonnalExchange 上，当路由键等于" nonnalKey" 的
 * 时候，消息能正确路由到 nonnalQueue 这个队列中。如果路由键设为其他值，比如 "errorKey飞
 * 即消息不能被正确地路由到与 nonnallixchange 绑定的任何队列上，此时就会发送给 myAe，进
 * 而发送到 unroutedQueue 这个队列 。
 */
public class AlternateExchangeProducer {

    public static void main(String[] args) throws IOException, TimeoutException {
        //创建连接
        Connection connection = ConnectionUtil.getConnection();

        //创建信道
        Channel channel = connection.createChannel();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("alternate-exchange", "myAe");
        //定义普通的交换器   durable  可持久的
        channel.exchangeDeclare("normalExchange", "direct", true, false, map);

//
        channel.queueDeclare("normalQueue", true, false, false, null);

        channel.queueBind("normalQueue", "normalExchange", "normalKey" );

        //        定义备胎交换器
        channel.exchangeDeclare("myAe", "fanout", true, false, null);
//        定义备胎队列
        channel.queueDeclare("unroutedQueue", true, false, false, null);
        channel.queueBind("unroutedQueue", "myAe", "");
        //发送一条持久化的消息: hello world !
        String message="备胎交换机!";
        //发送时候调用的是路由键

        channel.basicPublish("normalExchange","normalKey", MessageProperties.PERSISTENT_TEXT_PLAIN,message.getBytes());
        System.out.println("消息发送成功");
        channel.close();
        connection.close();
    }
}
